//package io.renren.utils.wx.wxpay;
//
//import io.renren.common.exception.RRException;
//import io.renren.common.utils.R;
//import io.renren.modules.app.base.ali.ThirdAuth;
//import io.renren.modules.app.base.wxpay.impl.MyConfig;
//import io.renren.modules.app.base.wxpay.sdk.WXPay;
//import io.renren.modules.app.base.wxpay.sdk.WXPayConstants;
//import io.renren.modules.app.base.wxpay.sdk.WXPayUtil;
//import io.renren.modules.app.entity.OrderEntity;
//import io.renren.modules.app.service.OrderService;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Component;
//
//import java.math.BigDecimal;
//import java.util.HashMap;
//import java.util.Map;
//
///**
// * 微信支付
// *
// * @author chenl
// */
//@Component
//public class WXPayUtils {
//
//    static Logger LOGGER = LoggerFactory.getLogger(WXPayUtil.class);
//
//    @Autowired
//    OrderService orderService;
//
//    @Autowired
//    WXPayProperties wxPayProperties;
//
//    @Autowired
//    MyConfig config;
//
//    @Override
//    public String authenticate() {
//        return null;
//    }
//
//
//    @Override
//    public Object generateOrderStr(String goodsName, String price, String orderNo) {
//        LOGGER.info("微信支付生成支付订单参数 goodsName = {},price = {},orderNo = {}", goodsName, price, orderNo);
//        try {
//            io.renren.modules.app.base.wxpay.sdk.WXPay wxpay = new WXPay(config);
//            Map<String, String> data = new HashMap<>(12);
//            // 商品描述
//            data.put("appid", wxPayProperties.getAppId());
//            data.put("mch_id", wxPayProperties.getMchId());
//            // 设备号 自定义参数，可以为终端设备号(门店号或收银设备ID)，app支付默认"WEB"
//            data.put("device_info", "WEB");
//            // 随机字符串
//            String nonceStr = WXPayUtil.generateNonceStr();
//            data.put("nonce_str", nonceStr);
//            data.put("sign_type", "MD5");
//            data.put("body", "好生活-" + goodsName);
//
//            // 商户系统内部订单号，要求32个字符内，只能是数字、大小写字母_-|* 且在同一个商户号下唯一
//            data.put("out_trade_no", orderNo);
//            // 货币类型，标价币种
//            data.put("fee_type", "CNY");
//            // 标价金额
//            data.put("total_fee", price);
//            // 终端IP
//            data.put("spbill_create_ip", "118.190.175.235");
//            // 微信回调地址
//            data.put("notify_url", wxPayProperties.getCallback());
//            // 交易类型，此处指定为扫码支付
//            data.put("trade_type", "APP");
//
//            String signature = WXPayUtil.generateSignature(data, config.getKey(), WXPayConstants.SignType.HMACSHA256);
//            data.put("sign", signature);
//            LOGGER.info("sign = {}", signature);
//            data.forEach((k, v) -> LOGGER.info("请求微信的参数 {}:{}", k, v));
//            Map<String, String> resp = wxpay.unifiedOrder(data);
//            LOGGER.info("响应数据 resp = {}", resp);
//            String return_code = resp.get("return_code");
//            if ("SUCCESS".equals(return_code)) {
//                // 成功 返回appId,merId,prepayid,package=WXPay,noncestr
//                //  "data": {
//                //    "nonce_str": "VtciUPoctmOwJ4eh",
//                //    "device_info": "WEB",
//                //    "appid": "wx661e2720af90df99",
//                //    "sign": "83C2A5EDBBC97251DE8D8547CC70857F57C91BC2C525284A0C7A2A171AEA3DC8",
//                //    "trade_type": "APP",
//                //    "return_msg": "OK",
//                //    "result_code": "SUCCESS",
//                //    "mch_id": "1595917131",
//                //    "return_code": "SUCCESS",
//                //    "prepay_id": "wx30002344162093fc114245161125609400",
//                //    "timestamp": "1590769424235"
//                //  }
//                // timestamp,sign
//                Map<String, String> map = new HashMap<>();
//                map.put("appid", wxPayProperties.getAppId());
//                map.put("partnerid", wxPayProperties.getMchId());
//                map.put("package", "Sign=WXPay");
//                // 签名用的随机字符串必须和调用同意下单接口返回的响应中的字符串一致。
//                map.put("noncestr", nonceStr);
//                map.put("timestamp", getSecondTimestampTwo(System.currentTimeMillis()));
//                map.put("prepayid", resp.get("prepay_id"));
//                String sign = WXPayUtil.generateSignature(map, wxPayProperties.getKey(), WXPayConstants.SignType.HMACSHA256);
//                map.put("sign", sign);
//                return map;
//            } else {
//                throw new RRException("获取微信支付链接失败");
//            }
//        } catch (Exception e) {
//            LOGGER.info("-----出现异常 {}", e.getMessage());
//            LOGGER.error(e.getMessage(), e);
//            throw new RRException("获取微信支付链接失败");
//        }
//    }
//
//    /**
//     * 将毫秒时间戳转成秒时间戳
//     *
//     * @param time
//     * @return
//     */
//    public static String getSecondTimestampTwo(Long time) {
//        if (null == time) {
//            return "";
//        }
//        String timestamp = String.valueOf(time / 1000);
//        return String.valueOf(timestamp);
//    }
//
//    public R refund(OrderEntity orderEntity) {
//        LOGGER.info("[微信退款订单信息 orderEntity = {}]", orderEntity);
//        // appid,mch_id,nonce_str,sign,sign_type(HMAC-SHA256)
//        // out_trade_no(商户订单号),out_refund_no(商户退款订单号)
//        // total_fee(订单金额),refund_fee(退款金额),
//        Map<String, String> map = new HashMap<>();
//        map.put("appid", config.getAppID());
//        map.put("mch_id", config.getMchID());
//        map.put("nonce_str", WXPayUtil.generateNonceStr());
//        map.put("sign_type", "HMAC-SHA256");
//        map.put("out_trade_no", orderEntity.getOrderNo());
//        String refundOrderNo = orderService.generateOrderNo();
//        map.put("out_refund_no", refundOrderNo);
//        map.put("total_fee", orderEntity.getPayPrice().multiply(BigDecimal.valueOf(100)).setScale(0).toString());
//        map.put("refund_fee", orderEntity.getPayPrice().multiply(BigDecimal.valueOf(100)).setScale(0).toString());
//        try {
//            WXPay wxPay = new WXPay(config);
//            Map<String, String> refund = wxPay.refund(map);
//            refund.forEach((k, v) -> LOGGER.info("[{}->{}]", k, v));
//            String return_code = refund.get("return_code");
//            if ("SUCCESS".equals(return_code)) {
//                // 退款成功
//                String result_code = refund.get("result_code");
//                if ("SUCCESS".equals(result_code)) {
//                    LOGGER.info("[微信退款成功]");
//                    String transaction_id = refund.get("transaction_id");
//                    // 保存退款订单号
//                    OrderEntity orderDO = new OrderEntity();
//                    orderDO.setOrderId(orderEntity.getOrderId());
//                    orderDO.setRefundOrderNo(refundOrderNo);
//                    orderDO.setRefundNo(transaction_id);
//                    orderService.updateById(orderDO);
//                    return R.ok();
//                }
//                LOGGER.info("[微信退款失败1]");
//                return R.error("退款失败");
//            }
//        } catch (Exception e) {
//            LOGGER.info("-----微信退款异常：{}", e.getMessage());
//            LOGGER.error(e.getMessage(), e);
//        }
//        LOGGER.info("[微信退款失败2]");
//        return R.error("退款失败");
//    }
//
//}
